package com.kernel;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/****************************************
 * @name MyInvocationHandler
 * @description 动态代理实现类
 * @author 黄彬恒
 * @since 2018/7/16
 ***************************************/
public class MyInvocationHandler implements InvocationHandler {
    private Object object;

    Object bind(Object object) {
        this.object = object;
        /*classloader类加载器，interfaces全部接口，InvocationHandler接口子类实例*/
        return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), this);
    }

    /**
     * @param proxy 被代理对象
     * @param method 要调用方法
     * @param args 方法调用时所需参数
     * @return Object
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        return method.invoke(this.object, args);
    }
}
